home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / bbs / ulp_225.zip / ULP.DOC < prev    next >
Text File  |  1997-05-05  |  79KB  |  1,616 lines

  1.  
  2.     ┌───────────────────┐
  3.     │                   │ ║                UpLoadProcessor
  4.     │    ╥   ╥ ╥        │ ║
  5.     │    ║   ║ ║ ╓──╖   │ ║                 Version 2.25
  6.     │    ║   ║ ║ ║  ║   │ ║
  7.     │    ╙───╜ ╨ ║──╜   │ ║     (c) Copyright 1997 - ZT Technologies
  8.     │            ╨      │ ║
  9.     └───────────────────┘ ║
  10.       ════════════════════╝
  11.  
  12.    ┌───────────────────────────────────────────────────────────────────────┐
  13.    │      Winner of the 1995 PCBoard Favorite Add-On Contest, Overall      │
  14.    │  Winner of the 1994 PCBoard Favorite Add-On Contest, Other Utilities  │
  15.    └───────────────────────────────────────────────────────────────────────┘
  16.  
  17.                              Techical Support:
  18.                              Herbert Bushong 
  19.                              Blackbeard's BBS
  20.                              318-468-3385  (V34+)
  21.  
  22. ┌───────────────────┐
  23. │  1. Introduction  │
  24. └───────────────────┘
  25.  
  26. This system was born out of a need for a universal upload processor.  There are
  27. many alternative systems available, but they are limited to the ZIP format and
  28. perhaps one or two others.  Few are able to handle self-extracting archives.
  29. Most are limited in the number of levels of archive nesting allowed in a file
  30. to be tested.  Very few properly handle archives with imbedded paths.  Many
  31. require the use of a third-party duplicate file checking system if you want to
  32. screen your uploads for duplicates.
  33.  
  34. Tired of waiting for PKZIP 2.something-or-another, I converted my BBS files
  35. over to the ARJ compression format, due to its superior compression ratio over
  36. PKZip and its features over LHA (I have since switched back to ZIP...the
  37. undertow was overwhelming <g>).  But due to that decision, the need for a
  38. universal upload processor became apparent, so off I went.
  39.  
  40. While I was at it, I decided to incorporate other technologies, such as
  41. duplicate checking, archive format conversion, customized displays and
  42. comments, internationalization, foreign language support, information lines,
  43. internal description files, etc., into a single package.  This software is the
  44. result of my efforts to allow my BBS to handle any archive that my users can
  45. throw at it.
  46.  
  47.  
  48. ┌─────────────────────────────────────────────┐
  49. │  2. Features of the UpLoadProcessor System  │
  50. └─────────────────────────────────────────────┘
  51.  
  52.   ∙ Native versions available for both 16-bit DOS and 32-bit OS/2!  DOS version
  53.     is fully OS/2, DESQview and Windows aware, including time-slice releasing.
  54.   ∙ Identifies and processes ARC, ARJ, HYP, LZH, PAK, RAR, SQZ, ZIP, ZOO, GIF,
  55.     JPEG and BMP files, regardless of their file extensions (ideal for software
  56.     distribution network files such as SDN).
  57.   ∙ Identifies and processes ARJ, LZH, RAR, SQZ and ZIP self-extracting (SFX)
  58.     archives.
  59.   ∙ Detects, processes and converts any archive with imbedded paths, retaining
  60.     all path information.
  61.   ∙ Scans ARC, PAK, ZIP and ZIP SFX archives for DOS reserved keywords to
  62.     prevent hacking by hex-editing. (ARJ and LHA are resistant to these type of
  63.     hacking attempts).
  64.   ∙ Detects ARJ security envelopes and ZIP version 1.x and 2.x authenticity
  65.     verification (-AV) stamps and may be retained intact.
  66.   ∙ Detects and rejects encrypted ARJ and ZIP archives.
  67.   ∙ Uses a recursive processing routine that will allow (theoretically)
  68.     unlimited nested archives and paths (the only limit is imposed by the OS
  69.     path).  This routine has been tested to 7 levels deep as of this writing.
  70.   ∙ Selected uncompressed files uploaded can be processed and compressed using
  71.     your default format.
  72.   ∙ Uploads can be filtered, privileged and TCANned on a wide variety of
  73.     criteria, including filename, file size, description keywords, etc..
  74.   ∙ Removes known BBS ads from archives; includes BBS ads database maintenance
  75.     functionality so that sysops can update their BBS ads databases in real
  76.     time.  ULP can also insert a BBS ad (ugh), if desired.
  77.   ∙ Sends messages to the online user and/or sysop for failed and/or passed
  78.     uploads, fully customizable and with multi-lingual support.
  79.   ∙ Updates the PCBoard DOWNLOAD.TXT file, if desired, with the correct archive
  80.     extension to reflect the conversion process.
  81.   ∙ Allows the use of up to 10 different archiving programs, all user-
  82.     configurable.  Any archiving program used that is not listed above will be
  83.     identified using its unique file extension only, until its signature is
  84.     determined and incorporated into ULP (after a new archive has demonstrated
  85.     widespread use).
  86.   ∙ Archive comments can be customized on an archive-by-archive basis through
  87.     the use of a template and @-variables.
  88.   ∙ Allows the use of up to 10 different file-checking programs, all user-
  89.     configurable, for virus and trojan checking, third-party utilities, etc.
  90.   ∙ Rejects GIF and JPEG files based upon image width, height, colors and/or
  91.     compression.  Different values can be selected for GIF and JPEG.
  92.   ∙ Allows the use of GIF and JPEG file checking programs, completely and
  93.     individually configurable.
  94.   ∙ User-definable disposition (keep, rename or delete) of corrupted, duplicate
  95.     or other archives (not virus-related).
  96.   ∙ User-definable disposition of virus-infected archives.
  97.   ∙ User-definable disposition of complete duplicate archives.
  98.   ∙ Incorporates it's own duplicate checking system, as well as the associated
  99.     database processing software.  This internal system is extremely fast and
  100.     it's database is much smaller than other systems.  Despite it's size, the
  101.     possibility of a false duplication is almost 1 in 10 trillion!  The system
  102.     is self-validating, to quickly determine if a database has been corrupted
  103.     or altered.
  104.   ∙ Optional seamless interface with the ZDCS duplication system.
  105.   ∙ ULP determines duplication using two filters, total duplication and
  106.     executable duplication, preventing false rejection by simply counting up
  107.     the number of blatantly duplicate files as other duplication systems do.
  108.   ∙ Converts all uploads into a default archive format of your choosing, or
  109.     they may be re-archived in their original format (user-defined).  Nested
  110.     and pathed archives can also be converted to your default format, or
  111.     re-archived using their original format.  SFX archives can be archived
  112.     using your default format, or optionally left alone after verification.
  113.     Archiving formats can be individually configured to not be converted to
  114.     your default, effectively allowing multiple defaults.
  115.   ∙ Can utilize a user-defined time window (in months) for acceptance of new
  116.     upload files, based on the actual or statistical average age of the files
  117.     within the archive, or optionally, the age of the newest file.
  118.   ∙ Supports the use of private and public upload directories.  Moves files and
  119.     upload descriptions from the private directory to the public directory.
  120.     Rejected uploads can be optionally moved to an offline area of your
  121.     choosing.  Single directory area operation may also be configured.
  122.   ∙ Duplication and age limits can be set on an area-by-area basis.
  123.   ∙ Honors the '/' identifier in the description marking the file as a private
  124.     upload for the sysop by processing the file, but not making it public.
  125.   ∙ Supports the use of DESC.SDI, FILE-ID.DIZ and VENDINFO.DIZ description
  126.     files in an archive, user-configurable.  The number of lines inserted is
  127.     also configurable, up to 40 lines maximum.
  128.   ∙ Smart word-wrapping word-wraps descriptions or leaves them as entered,
  129.     depending upon the presence of boxes, etc.
  130.   ∙ Can optionally insert an archive or GIF/JPEG information line in the file
  131.     description that contains various information about the upload.
  132.   ∙ Three modes of online testing are available: slow mode, which completely
  133.     processes files at the time of upload; normal mode, which fully unpacks the
  134.     archive and tests each file individually; and fast mode, which scans a ZIP
  135.     or ARJ archive directly for file CRCs, sizes and dates, and uses the
  136.     archiving program's internal integrity testing.
  137.   ∙ The online tester will accept a redirected ARJ or PKUNZIP archive listing
  138.     file to pre-verify the duplication and age limits before a user uploads the
  139.     actual archive, saving him or her wailing and gnashing of teeth.
  140.   ∙ ULP can generate COM port status output to inform the online user of the
  141.     progress of testing.  The format of the screen display is completely
  142.     sysop-designed through the use of template files; different template files
  143.     can be used for high-speed and low-speed callers.  Multi-lingual templates
  144.     files are supported.  ULP supports IRQs 2 through 15, non-standard port
  145.     addresses and baud rates to 115K in direct mode, supports FOSSIL drivers
  146.     and the OS/2 SIO API interface.  The port information can be defined on the
  147.     command-line or can be read directly from PCBOARD.SYS or DOOR.SYS.
  148.   ∙ Import of FWKCS(TM) contents_signature databases is supported to ease
  149.     transition to the ULP duplication system.  No need to rebuild databases for
  150.     FWKCS users!
  151.   ∙ Archives failed for exceeding duplication limits can be viewed using ULPSM,
  152.     to allow easy determination of manual archive acceptance.
  153.   ∙ User-selectable process logging to a disk file.  Two logging modes are
  154.     available: terse and verbose.  A debug operational mode can also be
  155.     utilized to help track down configuration errors.
  156.   ∙ Menu-driven windowed system manager for maximum ease of configuration,
  157.     including context-sensitive help.  Automatic installation speeds the
  158.     configuration and setup process for new users.
  159.   ∙ Written mostly in C (and a little assembler) for optimal speed, using
  160.     Borland C/C++ v4.5 and Watcom C/C++ v11.
  161.  
  162.  
  163. ┌─────────────────────────────────────────────────────┐
  164. │  3. Files Included in the ULP Distribution Archive  │
  165. └─────────────────────────────────────────────────────┘
  166.  
  167.     ULP.EXE         Upload processing program.
  168.     ULPSM.EXE       System and configuration manager for the ULP system.
  169.     ULPSM.HLP       Help data file for the ULP system.
  170.     BBSADS.DB       BBS ads database file.
  171.     ULP.DOC         This file.
  172.     FAQ.DOC         Frequently asked questions list.
  173.     SUPPORT.DOC     List of authorized support sites for my shareware.
  174.     HISTORY.DOC     ULP revision history in reverse order.
  175.     UPGRADE.DOC     Information specific to upgrading from previous versions.
  176.     REGISTER.FRM    Registration form for ULP and other software.
  177.     FILE_ID.DIZ     Internal description file.
  178.  
  179. When you unzip the distribution archive, you should see my PKZIP authenticity
  180. verification stamp, and a '-AV' after every file in the archive:
  181.  
  182.     # PNP757    ZT Technologies
  183.  
  184. If there are any files missing or added, or the -AV stamp is missing, the
  185. archive may have been tampered with. 
  186.  
  187. The 32-bit OS/2 executables ULP2.EXE and ULPSM2.EXE are distributed in a
  188. separate archive named ULP2_xxx.ZIP, where the "xxx" is the revision level of
  189. ULP.  Since this archive contains only the OS/2 executables, the general
  190. distribution archive must be downloaded as well.  This was done to reduce the
  191. size of the general distribution archive for those sysops not running OS/2 as
  192. their operating system.
  193.  
  194.  
  195. ┌───────────────────────────┐
  196. │  4. Program Requirements  │
  197. └───────────────────────────┘
  198.  
  199. To the best of my knowledge, the ULP programs will run on most any machine
  200. capable of running PCBoard 14.5+.  My BBS setup was OS/2 and DOS/DESQview on a
  201. LANtastic network with hard disks and CD-ROMs, but other sysops that I have
  202. been in contact with have successfully implemented ULP on setups with other
  203. varying hardware and software.
  204.  
  205. ULP has been developed and tested using the following third party utilities:
  206.  
  207.     ARJ 2.10 and higher (by Robert Jung)
  208.     HYPER 2.5 (by P. Sawatzki and K. P. Nischke)
  209.     LHA 2.12 and higher (by Haruyasu Yoshizaki)
  210.     LHarc 1.13c (by Haruyasu Yoshizaki)
  211.     PAK 2.51 (by NoGate Consulting)
  212.     PKPAK 3.61 (by PKWare)
  213.     PKZIP 1.10 and higher (by PKWare)
  214.     RAR 1.53 and higher [both DOS and OS/2 versions] (by Eugene Roshal)
  215.     SQZ 1.08.2 (by Jonas Hammarberg)
  216.     ZOO 2.01 and higher (by Rahul Deshi)
  217.     AntiAd 0.98ß and higher (by Stacy Smith)
  218.     F-PROT 2.07 and higher (by Frisk Software International)
  219.     SCAN V82 and higher (by McAfee Associates)
  220.     GFXCheck 1.00 and higher (by Stacy Smith)
  221.     GIFTEST 4.0 Beta 10 and higher (by Max Bernard/Dave Navarro)
  222.     ZDCS 2.03 and higher (by Stacy Smith)
  223.     TXT2MSG 2.42 and higher (by Robert Vostreys)
  224.     SHROOM 2.3a (by Davis Augustine)
  225.     UnZip 5.12 (by Info-ZIP)
  226.     ZIP 2.0.1 (by Adler, Wales, Gailly and Rommel)
  227.     OS/2Scan 2.2.0 (by McAfee Associates)
  228.     PipeDOS (by Scott Maxwell)
  229.  
  230. The ULP system requires DOS 3.x or later (or compatible, such as an OS/2 DOS
  231. VDM), as it uses DOS SHARE-compatible file reads and writes, and can use the
  232. DOS PATH to find the archiving and other utilities.  The 32-bit OS/2 version of
  233. ULP must be run under OS/2 2.0 or later.
  234.  
  235. ULP's memory requirements are relatively small (about 250K for ULP.EXE, 450K
  236. for ULPSM.EXE), and can easily live in the same amount of memory as PCBoard
  237. (450K as recommended by Clark Development).  Note that all programs are spawned
  238. or shelled, which reduces the free memory for the program being executed.  It
  239. would be a good idea to have as much free conventional memory as possible (ULP
  240. itself cannot use EMS or XMS memory except for swapping), especially if you use
  241. the ARJ compression system, which requires more than 300K itself to run.  None
  242. of these limits exist for the 32-bit OS/2 versions of ULP, since we are using a
  243. real operating system. <g>
  244.  
  245.  
  246. ┌───────────────────┐
  247. │  5. Registration  │
  248. └───────────────────┘
  249.  
  250. The ULP system is not free; nor is ULP is crippled to force registration.  ULP
  251. is fully functional, and will always remain so.  The primary difference is no
  252. time delay and beg message once registered.  The time delays will begin 45 days
  253. after the initial installation of ULP.
  254.  
  255. Why register?  Besides a clean conscience, you will get a registration key that
  256. will work for all future versions of ULP, and will remove the delay and message
  257. at the end of execution of each program.
  258.  
  259. The registration fee for ULP is $25 for hobbyist BBSes.  The registration fee
  260. for commercial BBSes, defined as running your BBS in the course of a commercial
  261. business (e.g. more than 10 nodes), is $40.  Please print the file REGISTER.FRM
  262. and fill it out.  You can print out the form by issuing the following command
  263. from the DOS prompt:
  264.  
  265.     TYPE REGISTER.FRM > PRN
  266.  
  267.  
  268. ┌───────────────────────────────────────┐
  269. │  6. License, Warranty and Disclaimer  │
  270. └───────────────────────────────────────┘
  271.  
  272. I'll keep this part short and sweet, and dispense (mostly) with the legal-ese:
  273.  
  274.     License:  You are allowed to use ULP for 30 days, after which you must
  275.         either register ULP or stop using it completely.  Decompiling,
  276.         disassembly or any other form of reverse engineering the ULP programs
  277.         for any purpose is prohibited.  ULP registration is a license for your
  278.         use of ULP; I retain ownership of the software.  A single registration
  279.         applies to a single BBS system, regardless of the number of computers
  280.         used in the system.  If you run two or more distinct BBS systems on the
  281.         same computer or network (with different names), you require two or
  282.         more ULP registrations.  ULP registrations are not transferrable; you
  283.         cannot sell your registration to another sysop.  Refer to the
  284.         registration form for the currect pricing structure.
  285.  
  286.     Warranty:  There isn't one.  The only thing I'll guarantee is that ULP will
  287.         take up disk space, and will disappear when deleted.
  288.  
  289.     Disclaimer:  I'm not responsible for anything bad that happens.  ULP works
  290.         here, but I cannot be held responsible for it not working on your
  291.         computer or doing any damage to hardware or software.
  292.  
  293. If these aren't agreeable with you, then the best thing to do is delete ULP
  294. right now.  I'll do my best to help any user (registered or not) that wants to
  295. use ULP, and I'll act on bug reports as quickly as possible, but I simply
  296. cannot and will not be responsible for anything bad, like lost data, disk
  297. crashes, or whatever else you can think of.
  298.  
  299.  
  300. ┌────────────────────────────┐
  301. │  7. Conceptual Background  │
  302. └────────────────────────────┘
  303.  
  304. *******************************************************************************
  305.         READ THIS SECTION CAREFULLY, AS IT WILL MAKE LIFE MUCH EASIER!!!
  306. *******************************************************************************
  307.  
  308. Since the ULP system is much more comprehensive than other upload processing
  309. software, and therefore more complex, this overview and concept explanation
  310. should help you understand how ULP is designed and how it can be best used for
  311. your BBS.  Some of this information may be specific to PCBoard sysops, but the
  312. general concepts remain the same.
  313.  
  314. Note that ULP is an inter-operating set of tools, not distinct independent
  315. functions.  In this fashion, ULP is better able to track what is happening
  316. between online testing and the event without sysop intervention.
  317.  
  318. BATCH PROCESSING:
  319. ─────────────────
  320. As a minimum setup, you MUST run ULP as an event-mode batch processor, since
  321. ULP handles most of the database updating, archive conversion, file and
  322. description moving, archive information line computation, and other features
  323. during the batch run.  THIS IS NOT AN OPTION!!!  Even if you run everything
  324. online in slow mode, some quick maintenance needs to be performed by ULP in the
  325. event on ULP system files that are not safely manipulated online.
  326.  
  327. When running ULP in a batch mode (batch, override), such as processing new
  328. files that come in on tape, CD-ROM, file distribution network, etc., ULP's
  329. operation can summed up as follows:
  330.  
  331.     ULP looks in the source area and processes all new files it finds (files it
  332.     hasn't seen before).  ULP moves the good files to the destination area, if
  333.     one is defined.  ULP moves the defective files to the failure area, if
  334.     defined.
  335.  
  336. Pretty simple concept, huh? <g>  ULP's batch modes do what you tell it to in
  337. the upload directory areas configuration; it doesn't know or care about private
  338. areas, public areas or otherwise.  Through the use of a self-maintaining data
  339. file, ULP knows what it has and hasn't already processed in every source
  340. subdirectory configured.  This allows enormous flexibility for a variety of
  341. tasks.  Some possibilities:
  342.  
  343.   - Local uploads:  Configure an input directory as your ULP source area, and
  344.         your BBS new uploads directory as the output.  As you get new files,
  345.         such as downloads from your own BBSing activities, place any files you
  346.         want to locally upload into the input directory and the batch
  347.         processing will process all new files and move the good files into your
  348.         BBS new uploads directory.  Optionally, a failure directory can be
  349.         configured to have the bad files moved into for better organization.
  350.  
  351.   - Robocomm R&P:  This would be setup similarly to the local uploads, where
  352.         you pass the Robocomm download directory and download DIR listing that
  353.         it creates during R&P runs to ULP as the source area, and configure
  354.         your new uploads area as your ULP destination area.
  355.  
  356.   - File distribution nets (.TIC files):  ULP doesn't toss .TIC files (no sense
  357.         re-inventing the wheel), but ULP's batch processing works very well
  358.         with most any .TIC tosser.  There are two ways this can be implemented.
  359.         First, the .TIC tosser can toss all the files into a holding directory,
  360.         and then ULP can move the good ones to the new uploads subdirectory.
  361.         If this way is used, you simply need to configure the holding directory
  362.         as the ULP source area, and the new uploads directory as the
  363.         destination.
  364.  
  365.         The other way is to have the .TIC tosser toss the files to their final
  366.         destination in your file directories.  The requires that you configure
  367.         every subdirectory that the .TIC tosser may toss files into as the
  368.         source directory, leaving the destination area blank.  This allows ULP
  369.         to scan all files in all directories, selecting only the new ones, and
  370.         process them.  In this implementation, it would be a good idea to
  371.         configure a failure area so that defective files are moved out of the
  372.         available file area to prevent user access to them.
  373.  
  374. ULP's batch processing modes are designed to be able to be run without shutting
  375. down your BBS nodes, however it would be a good idea to disable uploads during
  376. batch processing.  The reason for this is that if an upload occurs in a
  377. directory currently under event processing, the directory listings may become a
  378. source of contention if they both try to update it simultaneously.  This is
  379. very small risk, but it was documented anyway just in case.
  380.  
  381. ONLINE TESTING:
  382. ───────────────
  383. I believe that all responsible BBS sysops verify all of their uploads prior to
  384. posting them, in order to protect both themselves and their users.  ULP is
  385. designed with idea in mind.  Most, if not all, sysops process uploads in one of
  386. two ways (listed with benefits and liabilities as I see them), regardless of
  387. what upload processing software they use:
  388.  
  389.     1) Make all uploads private, processing them during a system event for
  390.        public distribution.
  391.  
  392.        BENEFITS:
  393.            ∙ Takes up very little on-line time on the user's part to process
  394.              archives if the re-compression process is skipped while online.
  395.            ∙ Allows the conversion of all archives to a default format, so that
  396.              the BBS archives are consistent.
  397.            ∙ Allows the BBS to accept any archive format...face it, it's hard
  398.              enough to get some of these weenies to upload, much less compress
  399.              them the same way.
  400.  
  401.        LIABILITIES:
  402.            ∙ Files are not available immediately for download.
  403.            ∙ Does not catch duplicates or aged archives until after the user
  404.              has uploaded them, and perhaps leads to abuse by clever (?) users.
  405.              (It is assumed that these sysops still use the venerable 'PKUNZIP
  406.              -T' in their PCBTEST.BAT...)
  407.  
  408.     2) Process (test) each upload online after the user uploads them, and
  409.        making them available for immediate download.
  410.  
  411.        BENEFITS:
  412.            ∙ Catches duplicate, defective and aged archives while the user is
  413.              online, denying him upload credits.
  414.            ∙ Files are available immediately for download if they are not made
  415.              private in the PCBoard setup.
  416.  
  417.        LIABILITIES:
  418.            ∙ Takes up on-line time for a user, potentially adding to his
  419.              long-distance phone bill, discouraging further uploading; this
  420.              process is typically quite slow for large archives.
  421.  
  422. ULP also implements an online processing system, with varying modes of
  423. operation from complete processing to a very fast scan of the archive directly
  424. for needed data.  These modes will allow you to run your BBS in the most
  425. efficient manner possible for both you and your users.
  426.  
  427. Pay attention to this part!!!:
  428.  
  429. PCBoard (as do many BBS platforms) normally has two upload directories for each
  430. conference: a private and a public directory.  When PCBoard invokes
  431. PCBTEST.BAT, the upload is currently in the private directory.  If the archive
  432. fails the testing, it will remain in the source directory.  However, if it
  433. passes, one of two things will occur depending upon your system setup:
  434.  
  435.   - If you have made all uploads private in PCBSETUP, the file will remain in
  436.     the private directory.
  437.   - If you have not made uploads private, it will be moved BY PCBOARD (not ULP)
  438.     to the public directory.
  439.  
  440. This is an important point:  during online testing, ULP does not move the file
  441. in any way; the BBS software is expected to disposition the upload file itself.
  442. ULP feeds back the testing results to the BBS software in two ways, via
  443. semaphore files and via an errorlevel.  The errorlevels returned by ULP are
  444. listed in the appendix of this file.
  445.  
  446. In PCBoard, if you have made all uploads private (via PCBSETUP), the setup and
  447. configuration of ULP is a snap: the source directory is the private upload
  448. directory, and the destination is the public directory.  However, if you want
  449. to allow users access to untested uploads, then your source directory is the
  450. public upload directory, and the destination information is left blank.  To
  451. illustrate the operation:
  452.  
  453.   MAKE ALL UPLOADS PRIVATE           │  ALL UPLOADS AVAILABLE AFTER TESTING
  454.   ───────────────────────────────────┼─────────────────────────────────────
  455.   2 directories:  C:\PRIVATE         │  Same...
  456.                   C:\PUBLIC          │
  457.                                      │
  458.   User uploads a file, gets placed   │  Same...
  459.   in C:\PRIVATE by PCBoard           │
  460.                                      │
  461.   ULP tests it online                │  Same...
  462.                                      │
  463.   PCBoard leaves file in C:\PRIVATE  │  If it passes, PCBoard moves it to
  464.                                      │  C:\PUBLIC; if it fails, PCBoard
  465.                                      │  leaves it in C:\PRIVATE
  466.                                      │
  467.   ULP in the event processes all     │  ULP in the event processes all *new*
  468.   new uploads found in C:\PRIVATE    │  uploads found in C:\PUBLIC since the
  469.   since the last event and moves     │  last event
  470.   all good uploads to C:\PUBLIC      │
  471.  
  472. Further, ULP's online testing modes also have three different modes of
  473. operation:  slow, normal and fast.  Slow mode completely tests the upload
  474. exactly as ULP does in the batch event.  Note that you MUST use the "all
  475. uploads public" mode of operation to run slow mode (this shouldn't be a
  476. problem, since there's little logic in forcing a user to wait for complete
  477. processing of an upload, only to be held private until later).
  478.  
  479. ULP's online normal mode de-compresses the files, performs file, duplication
  480. and age checking, and then deletes the extracted files and returns to the BBS,
  481. informing the BBS of the test results.  It does not re-compress the archive,
  482. remove BBS ads, add information lines, etc.; this is saved for the event
  483. processing.  This mode can be used with both setup paradigms, making all
  484. uploads private or public.
  485.  
  486. Fast mode DOES NOT decompress the file; it firsts performs an archive integrity
  487. check, scans ARJ and ZIP archives directly for duplicate and age information,
  488. and then returns to PCBoard (if the archive is not ARJ or ZIP, then normal mode
  489. is forced).  Typical fast mode scans of multi-megabyte archives are performed
  490. in less than 5 seconds!  In fast mode, file checking (viruses, etc.) is left
  491. for ULP to do in the event (which is why the above discussion regarding
  492. private/public directories is important).  This mode can also be used either in
  493. making uploads public or private, although it would be a good idea to make them
  494. private with this mode, since the uploads are not file-checked (e.g. for
  495. viruses) during test.
  496.  
  497. ULP's online testing modes will also accept a redirected ARJ or PKUNZIP listing
  498. text file with the special name VERIFY.ULP (no other name is acceptable) as
  499. input to pre-verify an upload for a user, before the user actually spends his
  500. time uploading the file only to find out it won't pass the limits you set.
  501.  
  502.  
  503. ┌───────────────────┐
  504. │  8. Installation  │
  505. └───────────────────┘
  506.  
  507. Now, on to installation of the ULP system.  ULPSM makes the installation ULP
  508. very easy, since it has a built-in initial installation system and context-
  509. sensitive, cross-referenced and fully indexed online help.  After reading the
  510. general concepts described in the preceding section, the following outlines a
  511. general guide to installing the ULP system in the shortest time:
  512.  
  513. 1. You will need the following programs and utilities for the default ULP
  514.    installation:
  515.  
  516.         ARJ, LHA and PKZIP/PKUNZIP archivers (DOS installations)
  517.         LH/2 and ZIP/UNZIP archivers (OS/2 installations)
  518.         TXT2MSG message importer (both DOS and OS/2 installations)
  519.  
  520.    Many other utilities can be used in conjunction with ULP, but these are
  521.    assumed to be available in the default ULP configuration.
  522.  
  523. 2. Make a subdirectory on your hard drive.  For the purposes of this document,
  524.    we'll call it "C:\ULP".  Unarchive the ULP distribution archive into this
  525.    subdirectory.  You've more than likely already made it this far, since you
  526.    are reading this file. <g>
  527.  
  528.    * NOTE: The help file ULPSM.HLP is required by the ULP programs and must be
  529.            located in the same subdirectory as the ULP executables for proper
  530.            operation!
  531.  
  532. 3. The ULP system opens several files at once for various reasons.  You should
  533.    have a minimum of FILES=40 per node in your system CONFIG.SYS file, since
  534.    ULP is run in conjunction with your BBS.  On the machine/node that runs the
  535.    ULPSM duplication database compilation event, I suggest at least FILES=50,
  536.    since the ULPSM database compilation routine opens up to 20 files
  537.    simultaneously.
  538.  
  539. 4. If you are running ULP under a network or a DOS multitasking operating
  540.    system, you should already have DOS's SHARE.EXE loaded (unless you are using
  541.    a SHARE-compatible network operating system such as Novell).  You must have
  542.    SHARE capabilty loaded in order to take advantage of the file sharing and
  543.    locking methods used by the ULP programs to prevent data loss.  (If you are
  544.    running a single-node system without a multitasker, SHARE is not needed).
  545.  
  546.    * NOTE: MS-DOS has a documented bug when SHARE is loaded high, where it
  547.            loses the table in memory.  Load SHARE low to prevent potential
  548.            sharing problems!
  549.  
  550. 5. Make sure you have your BBS software set to swap out of memory when running
  551.    an upload processor.  This is required due to memory requirements of
  552.    archivers, virus testers, etc., and probably is already set for most BBS
  553.    packages.  Check anyway... <g>
  554.  
  555. 6. Run ULPSM using the following command line:
  556.  
  557.         ULPSM -CULP.CFG
  558.  
  559.    The first time you use a new configuration filename in the ULPSM command
  560.    line, ULPSM will create a configuration file and generate the required
  561.    external files that a standard ULP implementation uses.  When you are asked
  562.    to save the configuration, save it.  From this starting configuration, only
  563.    a few specific adjustments need to be made.  Note that the pre-configured
  564.    archiver command lines are different based upon whether the DOS or OS/2
  565.    version of ULPSM is used to create the configuration file.
  566.  
  567. 7. Run ULPSM again, with the same command line as above.  You will need to make
  568.    the following configuration edits to complete your installation; don't
  569.    forget about the online help...there's a lot of useful information in there!
  570.    In addition, ULPSM will check for common configuration errors and provide
  571.    messages indicating any problems that it may find.
  572.  
  573.        Menu A (General options):
  574.  
  575.          - If you are running PCBoard, enter the full path and filename for
  576.            your DOWNLOAD.TXT file if automatic updating is desired.  Otherwise,
  577.            leave it blank.
  578.  
  579.        Menu B (Upload directories):
  580.  
  581.          - Select an unused slot and press ENTER.  Enter the appropriate
  582.            subdirectories and directory listings for your upload processing.
  583.            Refer to the following section titled "Configuration" and the online
  584.            help for more detail on this topic.  For the time being, you may
  585.            only want to configure one or two sets of upload directories for
  586.            testing purposes.
  587.  
  588.        Menu E (Archivers):
  589.  
  590.          - ULPSM pre-configures the most common archivers used (ARJ, LZH and
  591.            ZIP for DOS, and LZH and ZIP for OS/2).  If one or more of these
  592.            archivers are not available in your DOS or OS/2 path, you will need
  593.            to either put them in the path, provide the path directly in the
  594.            command lines in ULPSM or remove them from the ULP configuration.
  595.            Putting the required archivers in your path is more than likely the
  596.            simplest solution.
  597.  
  598.        Menu F (Virus/file testers):
  599.  
  600.          - Due to the wide variety and utilization of virus scanners available,
  601.            ULPSM makes no assumptions as to what you wish to use.  In this
  602.            menu, configure one or more file and virus testers to be used by
  603.            ULP.  Pay special note to the ULPSM help system, as it contains
  604.            recommended command lines for many of the more popular DOS and OS/2
  605.            virus scanners.
  606.  
  607.        Menu G (Duplication checking):
  608.  
  609.          - If you are using the ZDCS duplication system, you will need to
  610.            change the default setting from 'I' to 'Z', and provide the path to
  611.            ZDCS in the "Edit duplicate checking parameters" submenu.
  612.  
  613.          - If you are using the internal duplication system, you will need to
  614.            build and compile a database.  Select submenu B (Add files to
  615.            duplication database) and use one of your download directories as a
  616.            starting point.  After ULPSM is finished, select submenu C (Compile
  617.            duplication database) to compile the database.  More detail on
  618.            building your database will follow; for now, this will get us a
  619.            working database to tinker with.
  620.  
  621.        Menu J (GIF/JPEG file testing):
  622.  
  623.          - If you wish to use a graphics checking program (e.g. GFXCheck or
  624.            GIFTEST) to test GIF and/or JPEG uploads, place the command line in
  625.            this menu.  Again, refer to the online help for recommended command
  626.            lines.
  627.  
  628.        Menu L (Online testing):
  629.  
  630.          - ULPSM defaults to the normal online testing mode with a switchover
  631.            to fast mode at 500K.  If either slow or fast testing modes are
  632.            desired, alter the settings.
  633.  
  634.        Menu M (Process data file):
  635.  
  636.          - Select submenu B to initialize the process data file.  Generally,
  637.            initialization is required only once, unless otherwise instructed by
  638.            ULPSM.
  639.  
  640.        Menu N (Advanced options):
  641.  
  642.          - If you are not running PCBoard as your BBS software, these settings
  643.            may make integration of ULP into your system easier.  If you are
  644.            running PCBoard, adjustment of these values is usually not necessary
  645.            and will probably break your setup.
  646.  
  647.    Exit ULPSM, saving your configuration edits.
  648.  
  649. 8. Take a look at your ULP subdirectory now.  You will see a dozen or so
  650.    external configuration files that ULPSM automatically created.  These can be
  651.    edited either with a conventional text editor or through ULPSM using the
  652.    F2/F3 hotkeys, where appropriate.
  653.  
  654.    One of the newly-created files needs to be relocated.  Copy the PCBTEST.???
  655.    file to your \PCB subdirectory, copying over the existing one.  Back up your
  656.    old one if you think you might want it back later (I don't think you will,
  657.    though <g>).
  658.  
  659.    You will also find a file named ULPBLT.  This is a generic bulletin that you
  660.    may wish to post on your BBS to explain to your users the process for pre-
  661.    verifying uploads to your system via ULP.
  662.  
  663. 9. You are now all configured, and almost ready to go.  You now need to build
  664.    a complete ULP database if you are using the internal duplication database.
  665.    This can be postponed until later if you wish to do some testing or
  666.    experimentation with ULP prior to investing the time in constructing a
  667.    complete duplication database.  Refer to the section titled "Internal
  668.    Duplication Checking" for additional discussion.
  669.  
  670. 10. Edit your system event file, adding the following lines somewhere in it:
  671.  
  672.         C:                         ─────────────────┐  Change as necessary
  673.         CD \ULP                    ─────────────────┘  to match your setup
  674.         ULP -CULP.CFG -MBATCH -T0
  675.         ULPSM -CULP.CFG -S -T0
  676.  
  677.    This will run the ULP event batch processor and then compile your
  678.    duplication database with ULPSM (the last line is required only if you are
  679.    using ULP's internal duplication database system).
  680.  
  681. 11. That wasn't so bad, now was it?  Feel free to poke around with other
  682.    settings once you have verified that ULP is functioning properly.
  683.  
  684.  
  685. ┌────────────────────┐
  686. │  9. Configuration  │
  687. └────────────────────┘
  688.  
  689. Most of the information required to install ULP is contained in the online help
  690. system in ULPSM.  This exhaustive information will not be repeated here for
  691. brevity, but some topics that require additional clarification will be
  692. addressed here.
  693.  
  694. UPLOAD DIRECTORIES:
  695. ───────────────────
  696. In the past, this topic has been a point of some confusion to sysops.  ULP
  697. makes use of the upload directories configured in ULPSM during both online and
  698. batch processing, but in different ways.
  699.  
  700. When testing a file online, ULP is provided all necessary information by the
  701. BBS software.  It really doesn't need any of the upload directories defined in
  702. the ULP configuration; however, it does a comparison to the path passed by the
  703. BBS software and the areas configured to try and find a match.  If a match is
  704. found, ULP will use any area-specific settings (e.g. duplication and age
  705. limits) that are configured.  If no match is found, ULP will spit out a warning
  706. and continue with the default settings.
  707.  
  708. On the other hand, during batch (and override) processing, ULP makes extensive
  709. use of the upload directory configuration.  It will go through all upload
  710. directory sets configured, in order, processing any new files found in the
  711. source area, moving the good files to the destination (if configured) and any
  712. defective files to the failure area (if configured).
  713.  
  714. It is extremely important that you do not use one upload directory set's
  715. destination or failure subdirectory as a another set's source directory.  This
  716. can cause files to processed multiple times, resulting in duplication failures
  717. and other headaches.
  718.  
  719. Generally, if you make all uploads private, your source area will be your
  720. private upload area and the destination area will be your public upload area.
  721. If you make all uploads public, the source area will be your public upload area
  722. and the destination area will be blank.  In either case, failure areas can be
  723. used if desired.  Refer to the section titled "Conceptual Background" for more
  724. detail.
  725.  
  726. ONLINE TESTING:
  727. ───────────────
  728. To use ULP for on-line testing of archives, the following command line should
  729. be invoked.  During the initial configuration, ULPSM creates a PCBTEST.BAT for
  730. PCBoard sysops to use, which should be all that is necessary for PCBoard
  731. sysops.
  732.  
  733.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -T0
  734.  
  735. However, for non-PCBoard sysops, the following discussion outlines how to
  736. install ULP for online testing in your BBS package.
  737.  
  738. Two of the three passed % parameters to the batch file are required:  the
  739. filename to test, passed as %1 by PCBoard and the mode, passed as %2.  The
  740. temporary description file, passed as %3, is not required but will be updated
  741. by ULP if passed.
  742.  
  743. The filename (-F switch) should include a complete pathspec.  ULP will compare
  744. the path to the source upload directories configured in ULPSM, and if a match
  745. is found, ULP will use any directory-specific settings configured.  Therefore,
  746. the path(s) configured in ULPSM should match those configured in your BBS
  747. software for new uploads.
  748.  
  749. The only acceptable modes (-M switch) for online testing are "UPLOAD", "TEST"
  750. and "ATTACH" (these correspond to PCBoard's modes).  Upload mode is basically a
  751. full process, and is the most commonly-used mode.  Test mode unpacks the
  752. upload, performs file-checking and returns; this is done to allow the online
  753. user to test a file on the BBS in case a problem is found after download.
  754. Attach mode performs a complete test, but doesn't fail the upload under any
  755. circumstances; this is used primarily for attaching file to messages on the
  756. BBS.
  757.  
  758. The temporary description file (-D) is created by the BBS software and is
  759. expected to be in a format identical to the other upload directories as
  760. configured.  If it is not, do not use this parameter and let the event mode
  761. execution of ULP update the description.
  762.  
  763. SERIAL I/O DEFINITION:
  764. ──────────────────────
  765. ULP will gather any information that is required for operation from the door
  766. drop file located in the startup subdirectory (PCBOARD.SYS and DOOR.SYS are
  767. supported).  If desired, the serial port information can be handed directly to
  768. ULP by using the -P and -B command switches:
  769.  
  770.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P3E8,5 -B57600
  771.  
  772. The -P parameter can be 1 or 2, representing standard COM1 and COM2, or in the
  773. format "address,IRQ" as illustrated above for non-standard serial ports.  If -P
  774. is set to 0, this will suppress the remote comm I/O entirely.  The locked DTE
  775. baud rate of the port (not the DCE carrier speed) can be passed via the -B
  776. parameter.
  777.  
  778. If you are using the DSZPORT environment variable to define the port IRQ and
  779. address to DSZ, ULP can also use this information as well.  If the drop file
  780. indicates that a non-standard port is in use (e.g. not COM1 or COM2), ULP will
  781. automatically look for the DSZPORT environment variable.  Refer to the DSZ
  782. documentation for the proper specification of the DSZPORT environment variable
  783. (short version: it looks like the -P parameter, "SET DSZPORT=3E8,5").
  784.  
  785. ULP is capable of using a FOSSIL driver, but you must tell it to do so via the
  786. ULP command line.  Use the -X command switch to tell ULP to use the FOSSIL
  787. driver:
  788.  
  789.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -X
  790.  
  791. ULP will use the port specified in the door drop file or on the command line
  792. via the -P switch.  As a quick technical aside, with most FOSSIL drivers, the
  793. FOSSIL port number is normally 1 less than the COM port number.  In other
  794. words, COM1 is FOSSIL port 0, COM2 is FOSSIL port 1, etc..  ULP handles this
  795. conversion internally, but if necessary, you can force a specific port number
  796. via the -P command line parameter:
  797.  
  798.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -P1 -X
  799.  
  800. The above command line will force ULP to use FOSSIL port 0, which is by
  801. convention, COM1.
  802.  
  803. Similarly, the DOS ULP is also capable of talking directly to the OS/2 SIO API.
  804. In order to use this mode, you must tell ULP to do so via the -O command line
  805. switch:
  806.  
  807.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -O
  808.  
  809. Note that the OS/2 version of ULP obviously must use the OS/2 SIO API, so the
  810. -O switch is not required (but is accepted for compatibility's sake).
  811.  
  812. REMOTE DISPLAY TEMPLATES:
  813. ─────────────────────────
  814. The remote display templates offer tremendous flexibility for sysops to
  815. customize the user display that is produced by ULP.  While the template file
  816. design may seem a bit odd, it provides maximum flexibility for customization.
  817.  
  818. Basically, display templates are comprised of two sections: the form, and the
  819. responses.  When ULP is started up to perform an online test, the appropriate
  820. template is loaded and the form is immediately displayed.  Special {-variables
  821. are used in the form to tell ULP where in the form to put the responses.
  822.  
  823. As the file is processed by ULP, at special points in the processing ULP will
  824. output the responses, selecting the appropriate response based upon pass or
  825. failure.  If a process is not performed (such as packing when testing in normal
  826. or fast modes), no response is output for that process.  The form can be edited
  827. to eliminate these unnecessary lines if desired and appropriate.
  828.  
  829. As an example, review the following simple display template:
  830.  
  831.     ;
  832.     ; ****************************************************
  833.     ; *  UpLoadProcessor sample remote display template  *
  834.     ; ****************************************************
  835.     ;
  836.     ; Form definition
  837.     ;
  838.     BEGIN_FORM
  839.     Verifying @FILENAME@ from @USER@ on node @NODE@...
  840.     ┌─────────────────────────┐
  841.     │   UpLoadProcessor @VERSION@  │  Registered to: @BOARDNAME@
  842.     │ (c) 1992-96 Stacy Smith │  [Processing at @SYSTIME@ on @SYSDATE@]
  843.     └─────────────────────────┘
  844.         Upload format:          {FMT}
  845.         Unpacking file:         {UNP}
  846.         Testing file integrity: {CHK}
  847.         Duplicate checking:     {DUP}
  848.         Age checking:           {AGE}
  849.         Packing archive:        {PCK}
  850.         Other checks:           {MSC}
  851.     END_FORM
  852.     ;
  853.     ; Response definitions
  854.     ;
  855.     BEGIN_RESPONSES
  856.     @OPTEXT@
  857.     @OPTEXT@
  858.     Unpacked OK
  859.     Unpacking failure!
  860.     Passed virus checks
  861.     Failed virus checks
  862.     Passed duplication
  863.     Failed duplication
  864.     Passed age
  865.     Failed age
  866.     Compressed OK
  867.     Compressing failure
  868.     OK
  869.     Failed!
  870.     END_RESPONSES
  871.     ;
  872.     ; End of UpLoadProcessor template file
  873.     ;
  874.  
  875. The actual form is sandwiched between the two keywords "BEGIN_FORM" and
  876. "END_FORM"; 18 lines by 78 columns is the maximum size allowed in the form.
  877. Various @-variables can be used in the form and responses.  A complete list is
  878. in the ULPSM online help; unsupported @-variables will not be translated.
  879. There is no support for @CLS@; the reason for this is that ULP automatically
  880. clears the screen before displaying the form.  This allows ULP to properly
  881. determine the screen location of responses on a consistent basis.
  882.  
  883. Note the special variables {FMT}, {UNP}, {CHK}, {DUP}, {AGE}, {PCK} and {MSC}.
  884. These variables do nothing except tell ULP where the specific responses are to
  885. be located, and have a different format to help prevent confusion.  During form
  886. display, they are removed with no output so that they can ignored when
  887. attempting to align text.  The following table defines the meaning of these
  888. seven special macros:
  889.  
  890.     {FMT}   Location for the upload file format known/unknown response
  891.     {UNP}   Location for the unpacking pass/fail response
  892.     {CHK}   Location for the file/virus checking pass/fail response
  893.     {DUP}   Location for the duplicate checking pass/fail response
  894.     {AGE}   Location for the age checking pass/fail response
  895.     {PCK}   Location for the packing pass/fail response
  896.     {MSC}   Location for the miscellaneous pass/fail response
  897.  
  898. The "miscellaneous tests" defined are primarily the TCANs.  This response is
  899. always the last response displayed during processing.
  900.  
  901. Similarly, the responses are sandwiched between the two keywords
  902. "BEGIN_RESPONSES" and "END_RESPONSES".  @-variables can also be used in the
  903. form and responses, but all responses must be 50 characters or less.  The order
  904. of the responses is critical; no responses can be skipped (but they can be left
  905. blank).  The response order is as follows:
  906.  
  907.     BEGIN_RESPONSES
  908.     Archive format identified response string (usually just @OPTEXT@)
  909.     Archive format unknown response string (usually just @OPTEXT@)
  910.     Unpacking passed response string
  911.     Unpacking failed response string
  912.     File/virus checking passed response string
  913.     File/virus checking failed response string
  914.     Duplicate checking passed response string
  915.     Duplicate checking failed response string
  916.     Age checking passed response string
  917.     Age checking failed response string
  918.     Packing passed response string
  919.     Packing failed response string
  920.     Miscellaneous tests passed response string
  921.     Miscellaneous tests failed response string
  922.     END_RESPONSES
  923.  
  924. A special macro called @OPTEXT@ can be used in the responses.  For each
  925. possible response, the @OPTEXT@ macro will be loaded with special process-
  926. specific information, such as duplication ratio and archive age.  The following
  927. list describes the contents of the @OPTEXT@ macro for each of the seven
  928. possible responses:
  929.  
  930.     {FMT}   @OPTEXT@ contains the archiving format extension or "Unknown"; if
  931.             the archive has an -AV or is secured, @OPTEXT@ will be appended
  932.             with "(-AV/secure)".
  933.     {UNP}   @OPTEXT@ contains the program name used to unpack the upload.
  934.     {CHK}   @OPTEXT@ contains the last file checker executed (primarily for
  935.             failures).
  936.     {DUP}   @OPTEXT@ contains the total and executable duplication ratios in
  937.             the format "100%/100%".
  938.     {AGE}   @OPTEXT@ contains the age of the archive in months.
  939.     {PCK}   @OPTEXT@ contains the program name used to pack the upload.
  940.     {MSC}   @OPTEXT@ contains the name of the test (primarily for failures).
  941.  
  942. Note that by displaying results to the remote user can be a double-edged sword.
  943. While it can prevent the requisite questions from a user as to why an upload
  944. failed, this could also allow the "clever" user to bypass a failure by tweaking
  945. the archive contents just enough to make it pass.  Consider this before you use
  946. the @OPTEXT@ response macros.
  947.  
  948. All comments in the template file begin with a semi-colon, however, comments
  949. are not permitted between the BEGIN_FORM and END_FORM form definition or
  950. between the BEGIN_RESPONSES and END_RESPONSES response definition.
  951.  
  952. * NOTE: While the remote display template system is designed primarily for
  953.         ASCII and ANSI, RIP screens *may* be possible (I don't know as I
  954.         haven't tried it) by creating the appropriate RIP script command
  955.         strings in the form and response definitions.  However, the RIP
  956.         graphics will not be shown in the local display window.
  957.  
  958. For those who may be curious, the above example template will produce a display
  959. that looks like (for a passed upload):
  960.  
  961.     Verifying FOO.ZIP from JOE BLOW on node 4...
  962.     ┌─────────────────────────┐
  963.     │   UpLoadProcessor 2.20  │  Registered to: Nice Guys 'R Us
  964.     │ (c) 1992-96 Stacy Smith │  [Processing at 12:01 on 01/02/95]
  965.     └─────────────────────────┘
  966.         Upload format:          ZIP
  967.         Unpacking file:         Unpacked OK
  968.         Testing file integrity: Passed virus checks
  969.         Duplicate checking:     Passed duplication
  970.         Age checking:           Passed age
  971.         Packing archive:        Compressed OK
  972.         Other checks:           OK
  973.  
  974. By using the F4 hotkey in ULPSM, you can preview your display template, taking
  975. into consideration your current ULP configuration.
  976.  
  977. ULP fully supports multi-lingual display templates through the use of PCBoard
  978. conventions.  If you are offering multiple language PCBTEXT files, you can
  979. create multiple language display templates of the same extension and ULP will
  980. automatically select the appropriate language template, if one exists (if not,
  981. ULP will use the base template).
  982.  
  983. COMMENT TEMPLATE:
  984. ─────────────────
  985. The comment template allows customization of a comment for each file processed
  986. through the use of @-variables.  Archive statistics, file descriptions,
  987. processing date and time, BBS advertising, etc. can all be implemented in this
  988. template for display by using @-variables.  A complete list of @-variables and
  989. macros is available in the online help.  The following is a suggested comment
  990. template:
  991.  
  992.     ┌─────────────────────────────────────────────────────────────────────────┐
  993.     │  This archive has been fully tested and verified using UpLoadProcessor  │
  994.     │     by your Sysop to ensure your system's safety and file quality!      │
  995.     └─────────────────────────────────────────────────────────────────────────┘
  996.  
  997.                          Processed at @SYSTIME@ on @SYSDATE@
  998.  
  999.     Archive statistics:
  1000.         Number of files:  @NUM@
  1001.         Oldest file:      @OLD@
  1002.         Newest file:      @NEW@
  1003.         Total bytes:      @BYTE@
  1004.  
  1005.     Archive description:
  1006.     ───────────────────────────────────────────────────────────────────────────
  1007.     @DESC@
  1008.     ───────────────────────────────────────────────────────────────────────────
  1009.  
  1010. MESSAGE TEMPLATES:
  1011. ──────────────────
  1012. The message templates also offer a high degree of flexibility for sysops to
  1013. customize messages automatically generated by ULP during upload testing to the
  1014. online user and/or the BBS sysop.  By default, a user message is sent to the
  1015. online user and the sysop message is sent to "SYSOP" in conference number 0
  1016. (the main board conference for PCBoard systems) using a third-party message
  1017. insertion utility such as TXT2MSG for PCBoard.
  1018.  
  1019. The message template file(s) include both a fail message and a pass message;
  1020. this allows for different messages to be sent based upon test results.  Two
  1021. special control statements can be used to alter both the recipient and
  1022. conference (MSG_TO_NAME and MSG_CONF, respectively).  Review the following
  1023. sample user message template:
  1024.  
  1025.     ;
  1026.     ; *******************************************
  1027.     ; *  UpLoadProcessor user message template  *
  1028.     ; *******************************************
  1029.     ;
  1030.     MSG_FROM_NAME UpLoadProcessor
  1031.     ;
  1032.     ; Failed upload message
  1033.     ;
  1034.     MSG_CONF 1
  1035.     MSG_OPT -rly
  1036.     BEGIN_FAIL_MSG
  1037.     Hello @FIRST@,
  1038.  
  1039.     Thanks for the upload of @FILENAME@.@OFEXT@; unfortunately, it failed
  1040.     UpLoadProcessor's validation for the following reason:
  1041.  
  1042.         @FAILTEXT@
  1043.  
  1044.     If you believe this disposition was made in error, please contact the
  1045.     sysop.
  1046.  
  1047.     Thanks again for uploading and please try again soon!
  1048.     END_FAIL_MSG
  1049.     ;
  1050.     ; Successful (passed) upload message
  1051.     ;
  1052.     MSG_TO_NAME all
  1053.     MSG_CONF 0
  1054.     MSG_OPT -ply
  1055.     BEGIN_PASS_MSG
  1056.     Hello all,
  1057.  
  1058.     @USER@ has uploaded the new file @FILENAME@.@NFEXT@ to conference
  1059.     number @CONFNUM@:
  1060.  
  1061.     Upload size:      @NSIZE@ bytes
  1062.     Number of files:  @NUM@
  1063.     Dated:            @OLD@ - @NEW@
  1064.  
  1065.     Description follows
  1066.     ---------------------------------------------------------------------
  1067.     @DESC@
  1068.     ---------------------------------------------------------------------
  1069.  
  1070.     If this file looks of interest to you, take a look in the new uploads
  1071.     directory for it.  Thanks to @FIRST@ for the upload!
  1072.     END_PASS_MSG
  1073.     ;
  1074.     ; End of UpLoadProcessor template file
  1075.     ;
  1076.  
  1077. Notice that the message bodies are sandwiched between two pairs of control
  1078. statements, "BEGIN_FAIL_MSG" / "END_FAIL_MSG" and "BEGIN_PASS_MSG" /
  1079. "END_PASS_MSG".  If no fail or no pass message is desired, then that message
  1080. section of the template can be omitted.  All comments in the message template
  1081. file begin with a semi-colon, however, comments are not permitted in the
  1082. message body.
  1083.  
  1084. Most of the available @-variables can be used in the message body; a complete
  1085. list is in the ULPSM online help and unsupported @-variables are not
  1086. translated.  Note that @X color codes should not be used, as they will be
  1087. translated into ANSI codes which is not desirable for message bases.
  1088.  
  1089. In the above example template, the fail message has been redirected to
  1090. conference number 1 via the "MSG_CONF 1" before the fail message body line, and
  1091. the pass message directed to conference 0 to all users via the "MSG_CONF 0" and
  1092. "MSG_TO_NAME all" lines before the pass message body.  Furthermore, through the
  1093. user of the "MSG_OPT" parameter, the fail message has been made private (-r for
  1094. TXT2MSG) and the pass message is public (-p).  For the above example template,
  1095. the fail message will look something like:
  1096.  
  1097.     Hello Joe,
  1098.  
  1099.     Thanks for the upload of FILENAME.ZIP; unfortunately, it failed
  1100.     UpLoadProcessor's validation for the following reason:
  1101.  
  1102.         Age (60 months)
  1103.  
  1104.     If you believe this disposition was made in error, please contact the
  1105.     sysop.
  1106.  
  1107.     Thanks again for uploading and please try again soon!
  1108.  
  1109. and the pass message:
  1110.  
  1111.     Hello all,
  1112.  
  1113.     JOE BLOW has uploaded the new file FILENAME.ZIP to conference
  1114.     number 0:
  1115.  
  1116.     Upload size:      123456 bytes
  1117.     Number of files:  10
  1118.     Dated:            01-01-95 - 01-01-96
  1119.  
  1120.     Description follows
  1121.     ---------------------------------------------------------------------
  1122.     FILENAME.ZIP   123456  01-01-96  Cool brand spaking new file!
  1123.     ---------------------------------------------------------------------
  1124.  
  1125.     If this file looks of interest to you, take a look in the new uploads
  1126.     directory for it.  Thanks to Joe for the upload!
  1127.  
  1128. Failure-specific message templates can also be created by appending the failure
  1129. extension to the base filename.  For example, if your generic user template is
  1130. named "USER", a special template for duplication failures (extenion ".DUP") can
  1131. be used by naming it "USERDUP".  This can be of great help for sysops who get a
  1132. lot of questions regarding certain types of failures.  A complete list of
  1133. failure extensions is located elsewhere in this document.  No pass message
  1134. definition is required for failure-specific templates; the pass message will
  1135. always be extracted from the base (generic) message template.
  1136.  
  1137. ULP also supports multi-lingual message templates.  If you are offering
  1138. multiple language PCBTEXT files, you can create multiple language message
  1139. templates of the same extension and ULP will automatically select the
  1140. appropriate language template, if one exists (if not, ULP will use the base
  1141. template).
  1142.  
  1143.  
  1144. ┌─────────────────────────────────────┐
  1145. │  10. Internal Duplication Checking  │
  1146. └─────────────────────────────────────┘
  1147.  
  1148. When first installing ULP, if you plan to use ULP's internal duplication
  1149. database system, the duplication database must be created from scratch.  If you
  1150. have mostly ZIP and ARJ files, then this can be very quick (on the order of 5
  1151. minutes per 1000 archives on a hard disk, CD-ROMs typically take between 30
  1152. minutes and an hour...these numbers are from my experience, your mileage may
  1153. vary).  As usual, the online help provides a lot of useful information on
  1154. specific duplication database manipulation options.
  1155.  
  1156. If you use CD-ROMs on your BBS, pre-built databases may already be available
  1157. for your CD-ROM, greatly reducing the amount of time required to get your
  1158. system ready.  ULPSM can merge these pre-built duplication databases with your
  1159. main database in a matter of seconds versus spending the time building it
  1160. yourself.
  1161.  
  1162. If you are a user of the FWKCS duplication database system, ULPSM can import
  1163. and translate the FWKCS database directly into the ULP format.  This will also
  1164. be preferable from a speed standpoint to rebuilding the database from scratch.
  1165.  
  1166. If you have files that are off-line, they can be added to your duplication
  1167. database fairly easily.  Simply copy your offline files to a temp directory
  1168. (for the sake of argumentation, let's call it "C:\TEMP").  You can then add
  1169. them to the duplication database via ULPSM.  After the offline files are added,
  1170. just delete them from the temporary subdirectory, and if someone uploads a file
  1171. that you already have off-line, it will be rejected by ULP.
  1172.  
  1173. Once you have your database built, regular maintenance on the duplication
  1174. database files is required.  This will compile any new data from the day's
  1175. uploads into the main database, and remove any added temporary data from ULP's
  1176. online testing.  This is not required to be done every day, but performance
  1177. will degrade as more and more files (e.g. hundreds or thousands of uploads) are
  1178. processed without compilation.
  1179.  
  1180. To control duplication database size, database entries can also be purged from
  1181. the database.  Removal is based upon the file date represented by the entry,
  1182. NOT the date the file entry was made into the database; these are not one and
  1183. the same.  In general, this function is not required...ULP's internal database
  1184. system sees no performance degradation until the database exceeds 30 megabytes
  1185. (as a baseline, about 75 full CD-ROMs), which no one has even come close to
  1186. yet.  If you do wish to purge, purge using an age of at least twice your
  1187. configured age limit...this will help ensure that required data is maintained.
  1188.  
  1189. Note that ULPSM also locks the duplication database, preventing any other
  1190. program, including ULP, from accessing it.  I strongly suggest you have uploads
  1191. disabled when running ULPSM to compile your database to prevent upload failures
  1192. due to the inability to access the database.  At the minimum, perform the
  1193. compilation at a time when uploads are not likely to occur.
  1194.  
  1195. As with any other database system, you should backup your ULP duplication
  1196. database and index files regularly.  ULPSM validates your duplication database
  1197. during compilation to ensure that it hasn't been corrupted, but if corruption
  1198. occurs (due to crashes, power loss, deletion, bad karma, etc.), the database
  1199. may not be repairable.  Therefore, backup regularly!!!
  1200.  
  1201.  
  1202. ┌────────────────────┐
  1203. │  11. Other Topics  │
  1204. └────────────────────┘
  1205.  
  1206. While the ULP system is mostly automatic, there are some occasions where
  1207. operations may have to be done manually.  The following topics discuss some of
  1208. the issues related to running ULP manually, including some command line
  1209. switches.
  1210.  
  1211. OS/2 SPECIFIC VERSION (ULP & ULPSM):
  1212. ────────────────────────────────────
  1213. The OS/2 executables of ULP and ULPSM are native 32-bit executables that
  1214. require OS/2 version 2.0 or later.  They are completely compatible with the DOS
  1215. versions of ULP and ULPSM, including all configuration and data files, but do
  1216. not have some of the functional limits imposed on the DOS versions due to
  1217. memory constraints.
  1218.  
  1219. However, it should be noted that separate configurations will be required if
  1220. you wish to use both the DOS and OS/2 versions of the ULP programs since the
  1221. external utilities are different in both name and command lines.  For example,
  1222. since PKWARE hasn't updated their PKZIP program for OS/2 beyond version 1.02,
  1223. you will need to use an alternate ZIP program, such as InfoZIP's ZIP 2.0.1 or
  1224. later.  These command lines are, of course, different, hence different ULP
  1225. configuration files are required.
  1226.  
  1227. In addition, during testing, enhanced speed has been noted when *not* running
  1228. external programs in a window.  This is partly due to the VIO speed of OS/2 and
  1229. CPU overhead of the I/O redirection thread.
  1230.  
  1231. You should not use DOS external programs in the OS/2 version of ULP.  However,
  1232. if you must use an occasional DOS program, you should use PipeDOS, a utility by
  1233. Scott Maxwell that correctly passes the program errorlevel back to the calling
  1234. OS/2 program, which is a requirement for ULP to operate correctly.  After
  1235. installing PipeDOS per it's instructions, simply configure the DOS command line
  1236. as you normally would in ULPSM, but the first argument before the program name
  1237. will be "pipedos", e.g.:
  1238.  
  1239.     pipedos command arg1 arg2 ...
  1240.  
  1241. PipeDOS-called DOS programs should not be run in a window.  Also, PipeDOS-
  1242. called programs are very slow, so I recommend you use them only for programs
  1243. that are called infrequently and that don't have OS/2 counterparts (e.g. ARJ).
  1244.  
  1245. MICROSOFT WINDOWS (ULP & ULPSM):
  1246. ────────────────────────────────
  1247. Do not enable idle detection in Windows 3.x or Windows 95 (e.g. don't check the
  1248. "Detect Idle" box of the Advanced Settings of the PIF file).  Doing so may
  1249. cause Windows to take away so many time slices from ULP in the background that
  1250. it will appear to hang (until brought back into the foreground or a key is
  1251. pressed).  ULP gives away time slices without requiring Windows to do it's
  1252. thinking for it (what little thinking Windoze does <g>).
  1253.  
  1254. DESQVIEW (ULP & ULPSM):
  1255. ───────────────────────
  1256. The DOS versions ULP and ULPSM write text directly to video for speed.  If you
  1257. experience bleed-through of the ULP video in DESQview, you may need to enable
  1258. the flag for those windows that will run the ULP software to tell DESQview that
  1259. applications write directly to video (first page of settings, near the bottom).
  1260. That should eliminate the bleed-through.
  1261.  
  1262. ONLINE HELP (ULPSM):
  1263. ────────────────────
  1264. The online help is fully indexed and cross-referenced with other related topics
  1265. to ease navigation through the database.  If some fields seem to have
  1266. relatively little information, this generally means that another topic,
  1267. normally on a higher-level menu, has more in-depth information.  If you have
  1268. difficulty finding a topic, go into the index and locate the pertinent titles
  1269. to find the help you need.
  1270.  
  1271. If you do not have a mouse to help navigate ULPSM's online help screens, the
  1272. "Index" buttom can be activated by pressing the Alt-I key combination.  Also,
  1273. the "Prev" button is accessed by Alt-F1 and "Quit" is the same as pressing ESC.
  1274.  
  1275. The general idea behind ULP's documentation is that this document outlines how
  1276. to best install and use ULP.  The online help outlines detailed configuration
  1277. information and some instructional information on ULPSM.
  1278.  
  1279. DISPLAY READABILITY (ULP & ULPSM):
  1280. ──────────────────────────────────
  1281. ULP and ULPSM both utilize time delays at certain points in the process to
  1282. allow users to see what's going on with ULP.  The default time delay is 3
  1283. seconds, but can be altered between 0 and 10 seconds via the -T command line
  1284. switch.  Generally, during the event batch processing and online processing of
  1285. uploads, you should set the time delay to 0 for maximum speed.  For example, to
  1286. change the time delay to 5 seconds for a run of ULPSM:
  1287.  
  1288.     ULPSM -CULP.CFG -T5
  1289.  
  1290. When manually running ULP or trying to debug a configuration error, it may be
  1291. helpful to use a longer time delay to see exactly what ULP is doing normally at
  1292. high speed.
  1293.  
  1294. QUIET (ULP & ULPSM):
  1295. ────────────────────
  1296. ULP and ULPSM normally issue a beep on an error or warning, but the beep can be
  1297. disabled using the -Q switch:
  1298.  
  1299.     ULP -CULP.CFG -MBATCH -Q
  1300.     ULPSM -CULP.CFG -Q
  1301.  
  1302. ESCAPING FROM LONG PROCESSES (ULP & ULPSM):
  1303. ───────────────────────────────────────────
  1304. When running long, time-consuming processes, namely ULP's batch processing
  1305. modes and ULPSM's database addition, it is possible to abort the process by
  1306. pressing the ESC key.  Note that ULP and ULPSM may not immediately respond!
  1307. They must finish the current task before allowing you to abort the process.
  1308. Further, if you are processing multiple subdirectories in a run, the abort will
  1309. affect only the current subdirectory.  ULP and ULPSM will start the next
  1310. subdirectory after cleaning up from the current abort.  This allows you to pick
  1311. and choose what to process if desired.
  1312.  
  1313. GIF/JPEG PROCESSING (ULP):
  1314. ──────────────────────────
  1315. By default, GIF and JPEG file detection and processing is enabled.  In order to
  1316. disable all GIF and/or JPEG file processing, set all three of the minimum image
  1317. parameters to 0.  In doing so, you disable not only the file processing, but
  1318. the file format detection, resulting in a GIF or JPEG upload being rejected as
  1319. an unknown format.
  1320.  
  1321. On the other hand, if you wish to accept *all* GIF or JPEG files, regardless of
  1322. image parameters, set the minimum image width and height to 0, but set the
  1323. minimum number of colors to 1 (all graphic images have at least 2 colors).
  1324. This will have the effect of detecting and processing the requested graphic
  1325. format without rejecting based upon image values.
  1326.  
  1327. DEBUGGING (ULP):
  1328. ────────────────
  1329. When attempting to find a configuration error or track down a potential bug in
  1330. ULP, using debug mode will be a great help.  Debug mode will slow down the ULP
  1331. display, force all external programs to run full-screen and dump virtually all
  1332. screen output to the log file.  To use debug mode, add the -! switch:
  1333.  
  1334.     ULP -CULP.CFG -MBATCH -!
  1335.  
  1336. ALL BUG REPORTS MUST BE ACCOMPANIED BY A DEBUG LOG for me to be able to figure
  1337. out the problem.  Note that if you are experiencing a problem that causes a
  1338. system hang, the debug log is in the data work subdirectory with a filename
  1339. "$LOG????".
  1340.  
  1341. OVERRIDE MODE (ULP):
  1342. ────────────────────
  1343. During the course of operation, ULP may (depending upon your configuration)
  1344. rename archives that have been found to be defective in some manner according
  1345. to the following convention:
  1346.  
  1347.     .UNK    Unknown archive format
  1348.     .DOS    DOS reserved keyword found in archive
  1349.     .ERR    Error occurred while unpacking archive (archive integrity failure)
  1350.     .CHK    Error found while file checking archive file (virus, etc.)
  1351.     .DUP    Excessive duplicate files contained in archive
  1352.     .PCK    Error occurred while repacking archive file
  1353.     .AGE    Age limit exceeded by archive file
  1354.     .ENC    Encrypted file found in archive
  1355.     .TCN    File was TCANned
  1356.     .BAD    Error found while testing GIF file
  1357.     .RES    Unacceptable GIF or JPEG resolution
  1358.     .GLT    GIF compressed with GIFLITE
  1359.     .WRK    Unable to create work space for processing file
  1360.     .MTY    Empty archive detected
  1361.  
  1362. If you feel that these files are acceptable after reviewing them, you can force
  1363. them to be accepted by using override mode, e.g.:
  1364.  
  1365.     ULP -CULP.CFG -MOVERRIDE
  1366.  
  1367. This will re-process ALL files in the source area (or the failure area, if that
  1368. is where the defective files are) and ignore the results of TCANs, duplication
  1369. and age, moving them to the destination area (if configured).  Override mode
  1370. will not override unpacking, packing, integrity and virus errors, however, for
  1371. the safety of your board and your users.  Also, override mode is of little use
  1372. if your upload areas are not utilizing a destination area.
  1373.  
  1374. If selected files need to be overridden, but not the entire set of failed
  1375. uploads, you can specify a filespec on the command line via the -F switch.  For
  1376. example:
  1377.  
  1378.     ULP -CULP.CFG -MOVERRIDE -FFILENAME.ZIP
  1379.     ULP -CULP.CFG -MOVERRIDE -F*.ARJ
  1380.  
  1381. Since override mode operates on the upload directory sets configured in ULPSM,
  1382. paths are not required or supported in the filespec passed in the -F switch for
  1383. override mode.  Any included path in the -F parameter will be ignored by ULP.
  1384.  
  1385. RETEST MODE (ULP):
  1386. ──────────────────
  1387. ULP can retest for viruses, etc. all archives found in the subdirectory passed
  1388. to it via the -F switch.  ULP will not perform any TCANning, duplication
  1389. checking or age checking, nor will it repack the archive.  It will simply
  1390. unpack and archive and file check it; this allows sysops to use newer versions
  1391. of virus scanners periodically to look for viruses that may have been missed
  1392. during the original file processing with an older revision of the virus
  1393. checker.  Some example command lines:
  1394.  
  1395.     ULP -CULP.CFG -MRETEST -FD:\PATH\
  1396.     ULP -CULP.CFG -MRETEST -FD:\PATH\*.ZIP
  1397.  
  1398. CONVERT MODE (ULP):
  1399. ───────────────────
  1400. ULP can also perform a mass conversion of the archives found in the path passed
  1401. to it to your default archiver.  ULP will retest and convert all archives found
  1402. in the subdirectory indicated using the same processing flags as new uploads.
  1403. For example:
  1404.  
  1405.     ULP -CULP.CFG -MCONVERT -FD:\PATH\
  1406.     ULP -CULP.CFG -MCONVERT -FD:\PATH\*.ARJ
  1407.  
  1408. Convert mode does not perform any description insertion or updating; it is
  1409. primarily to permit mass conversion of archives in bulk from one format to
  1410. another.
  1411.  
  1412. LOCAL MODE (ULP):
  1413. ─────────────────
  1414. When ULP performs online testing, it expects to find a door drop file and to
  1415. generate a remote display to a user over the modem.  ULP also determines at
  1416. startup whether an upload is a local upload, however this requires a drop file
  1417. as well.  By using the -L switch, you can force ULP to perform an online mode
  1418. test without a drop file:
  1419.  
  1420.     ULP -CULP.CFG -MUPLOAD -L -FD:\PATH\FILENAME.EXT
  1421.  
  1422. This mode can be used to plug ULP into another program as a single file
  1423. processor where a remote display is not required or appropriate.
  1424.  
  1425. RETAIN ORIGINAL ARCHIVE DATE (ULP):
  1426. ───────────────────────────────────
  1427. ULP normally stamps all uploads with the current date and time of processing.
  1428. If you wish to keep the original archive date, add the -R switch to the command
  1429. line:
  1430.  
  1431.     ULP -CULP.CFG -MBATCH -R
  1432.  
  1433. Note, that this doesn't affect the date inserted in the directory listing for
  1434. the upload; this affects only the file date stamp on disk.
  1435.  
  1436. NODE NUMBER (ULP):
  1437. ──────────────────
  1438. ULP normally gets the current node number from the door drop files, however
  1439. this can be overridden on the command line using the -N switch should the need
  1440. arise.  Normally this is used only for online testing modes, since the ULP
  1441. program manages node contention on its own to prevent node number duplication
  1442. and processing collisions.  An example of node number definition:
  1443.  
  1444.     ULP -CULP.CFG -MBATCH -N100
  1445.  
  1446. Use this switch only if you absolutely need to; under most circumstances it is
  1447. not required.  Note that node 0 is not an acceptable number.
  1448.  
  1449. DISABLE 16550 FIFO (ULP, DOS versions only):
  1450. ────────────────────────────────────────────
  1451. If your BBS is running on an oddball 16550-compatible serial port, such as
  1452. early Western Digital UARTs and Hayes ESPs, you may get better performance by
  1453. disabling the FIFO operation of ULP during online testing mode.  This is done
  1454. by adding the -1 switch to the command line in PCBTEST.BAT (online testing is
  1455. the only time where you might need to disable 16550 FIFOs):
  1456.  
  1457.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -1
  1458.  
  1459. HANDSHAKE METHOD (ULP, DOS versions only):
  1460. ──────────────────────────────────────────
  1461. Serial I/O requires that the ports handshake in some fashion to know when to
  1462. start and stop data transfer; two methods are commonly used, either separate or
  1463. in combination.  The most common is hardware (also referred to as RTS/CTS) and
  1464. this is the ULP startup default.  The other method, which is used primarily for
  1465. compatibility with older equipment, is software (also known as XON/XOFF).  If
  1466. you need software or both types of handshaking in your system, you can specify
  1467. it on the command line:
  1468.  
  1469.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HSOFTWARE
  1470.     C:\ULP\ULP.EXE -CC:\ULP\ULP.CFG -F%1 -M%2 -D%3 -HBOTH
  1471.  
  1472.  
  1473. ┌───────────────┐
  1474. │  12. BBS Ads  │
  1475. └───────────────┘
  1476.  
  1477. The ULP system includes a BBS ad removal feature based on CRC-32 calculation of
  1478. the file contents and other pertinent data.  In this fashion, ULP can detect a
  1479. known ad file despite changes of the file name and date.
  1480.  
  1481. In order for sysops to be able to 'keep up' with new ads produced by the weenie
  1482. sysops who insert the @!&*#%$ things, ULPSM has two maintenance functions that
  1483. permit the sysop to update the BBS ads database with their own information.
  1484.  
  1485. First, ULPSM can scan a BBS ad file (or multiple files), and update the BBS ads
  1486. database with the required information.  Don't worry about duplication within
  1487. the database, as part of the compiling process is to purge duplicate BBS ad
  1488. data.  To add files to the BBS ads database, select menu G (BBS ad processing),
  1489. and select submenu B (Add new BBS ad to BBS ads database).  The online help
  1490. contains all information that may be necessary.
  1491.  
  1492. Second, since the latest version of my master BBS ads database is always
  1493. included in the distribution archive, you don't want to keep changing your
  1494. database from release to release.  Therefore, you can merge the new release
  1495. database with your existing BBS ads database via ULPSM as well.  To merge the
  1496. distribution database with your own database, select menu G (BBS ad
  1497. processing), and select submenu C (Merge pre-built BBS ad database).  Again,
  1498. the online help contains all information that may be necessary.
  1499.  
  1500. Note that ULPSM cannot (will not) put 0-byte bbs adds in its database; this is
  1501. because every 0-byte file has the same CRC-32: 0.  Therefore, inserting 0-byte
  1502. files into a numerical database is useless and doing so would remove *every*
  1503. 0-byte file encountered, not just the BBS ads, including subdirectory markers
  1504. in pathed archives.  The exclusion filter list is the best place for 0-byte
  1505. ads, since the only thing unique to 0-byte files is the filename.
  1506.  
  1507. I would greatly appreciate your passing along any new BBS ad files that you may
  1508. collect over time to me so I can update the master database that I include with
  1509. the ULP distribution archive.  Please refer to the top of this document for my
  1510. BBS number.
  1511.  
  1512.  
  1513. ┌─────────────────────────┐
  1514. │  13. The Future of ULP  │
  1515. └─────────────────────────┘
  1516.  
  1517. ULP will be supported as long as I'm in the BBSing business (which will be
  1518. quite a while...once it's in your blood, you can never shake it <grin>).  
  1519.  
  1520.  
  1521. If you have any other suggestions, or want other archivers supported, please
  1522. contact me via Email, U.S. snail-mail or on my BBS at the number at the top of
  1523. this document.
  1524.  
  1525. Thanks for giving ULP a try!
  1526.  
  1527.  
  1528. ┌────────────────────────────────┐
  1529. │  Appendix A:  DOS Errorlevels  │
  1530. └────────────────────────────────┘
  1531.  
  1532. The following is a partial list of errorlevels returned to the operating
  1533. system by the ULP and ULPSM programs.  Not all errorlevels are documented,
  1534. since the error messages are much more useful in debugging problems.
  1535.  
  1536.     0       Successful execution (ULP and ULPSM)
  1537.     1       Successful execution, nothing to do (ULP event modes)
  1538.     1       Unknown archive format (ULP online modes)
  1539.     2       DOS reserved keyword found in archive (ULP online modes)
  1540.     3       Error unpacking archive (archive integrity) (ULP online modes)
  1541.     4       Error file checking archive files (virus, etc.) (ULP online modes)
  1542.     5       Error duplicate checking archive files (ULP online modes)
  1543.     6       Error packing archive (ULP online modes)
  1544.     7       Age limit exceeded by archive files (ULP online modes)
  1545.     8       Encrypted file found in archive files (ULP online modes)
  1546.     9       TCANned file (ULP online modes)
  1547.     10      Bad GIF file (ULP online modes)
  1548.     11      Unacceptable GIF or JPEG resolution (ULP online modes)
  1549.     12      GIF compressed with GIFLITE (ULP online modes)
  1550.     13      Unable to create work space (ULP online modes)
  1551.     14      Empty archive detected (ULP online modes)
  1552.     99      Help screen (executing a program with no or an insufficient number
  1553.             of arguments)  (ULP and ULPSM)
  1554.     >99     Program error (refer to the error message and log file).
  1555.  
  1556.  
  1557. ┌────────────────────────────────┐
  1558. │  Appendix B:  Acknowlegements  │
  1559. └────────────────────────────────┘
  1560.  
  1561. The DOS versions of ULP and ULPSM use the SPAWNO swapping routines by Ralf
  1562. Brown to minimize memory use while shelling to DOS and running external
  1563. programs.
  1564.  
  1565. The Graphics Interchange Format(c) is the Copyright property of CompuServe
  1566. Incorporated.  GIF(sm) is a Service Mark property of CompuServe Incorporated.
  1567. (Standard verbage required by CompuServe)
  1568.  
  1569. The problem of automatically recognizing duplicate files on large bulletin
  1570. board systems, independent of filename, was originally solved by Dr. Frederick
  1571. W. Kantor (founder of Information Mechanics and author of FWKCS(TM)
  1572. Contents_Signature System), who came up with the elegant solution of using both
  1573. the 32_bit CRC and the uncompressed file length together to make a
  1574. "contents_signature" for each file. Dr. Kantor's experimental data has shown a
  1575. typical pairwise error rate of less than one part in ten trillion using this
  1576. technology.
  1577.  
  1578.  
  1579. ┌─────────────────────────────────────┐
  1580. │  Appendix C:  Command Line Summary  │
  1581. └─────────────────────────────────────┘
  1582.  
  1583. ULP.EXE command-line syntax:
  1584.  
  1585. ULP -Cd:\path\config.ext -Mmode [-Fd:\path\<file.ext>] [-Dd:\path\desc.ext]
  1586.    [-P#<,#>] [-B#] [-H?] [-1] [-X] [-O] [-L] [-N#] [-G?] [-R] [-T#] [-Q] [-!]
  1587.  
  1588.     -C  filename of the ULP configuration file
  1589.     -M  processing mode [Batch/Override/Retest/Convert/Upload/Test/Attach]
  1590.     -F  filename/subdirectory of the archive(s) to be tested  (conditional)
  1591.     -D  filename of the upload description file  (optional)
  1592.     COM port switches:  (optional)
  1593.     -P  COM port number [0-2/addr,irq]  -L  force local mode
  1594.     -B  DTE baud rate [300-115200]      -H  handshake [Hardware/Software/Both]
  1595.     -1  disable 16550 FIFO operation    -X  use FOSSIL driver interface
  1596.     -O  use OS/2 SIO API interface
  1597.     Miscellaneous switches:  (optional)
  1598.     -N  BBS node number                 -G  ANSI graphics toggle [Yes/No]
  1599.     -R  retain original archive date    -T  readability time delay [0-10]
  1600.     -Q  quiets beep on error            -!  enables debugging operation
  1601.  
  1602. ULPSM.EXE command-line syntax:
  1603.  
  1604.     ULPSM -Cd:\path\config.cfg [-Ad:\path\<file.ext>] [-U] [-R] [-S] [-P#] [-I]
  1605.         [-T#] [-Q]
  1606.  
  1607.     -C  complete path and filename of the configuration file
  1608.     -A  file(s) to add to the duplication database  (optional)
  1609.     -U  forces unpacking of all archives when adding files  (optional)
  1610.     -R  recurses nested drive subdirectories when adding files  (optional)
  1611.     -S  compiles, sorts and indexes the duplication database  (optional)
  1612.     -P  age in months for purging duplication database records  (optional)
  1613.     -I  initialize process data file  (optional)
  1614.     -T  sets time delay for display readability  (optional)
  1615.     -Q  quiets beep when an error is detected  (optional)
  1616.